package Multithreading.Exercise002;

/**
 * ClassName:ThreadDome001
 * Package:Multithreading.Exercise002
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/3/5-16:58
 * @Version:v1.0
 */
public class ThreadDome001 {
    /**
     * 线程的安全问题
     */
    public static void main(String[] args) {
        //需求：某电影院目前正在上映国产大片,共有100张票,而他有3个窗口买票,请设计一个程序模拟该电影院卖票

        //创建线程对象
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();
        MyThread t3 = new MyThread();

        //起名字
        t1.setName("窗口1");
        t2.setName("窗口2");
        t3.setName("窗口3");

//        t1.setPriority(1);
//        t2.setPriority(5);
//        t3.setPriority(10);
        //开启线程
        t1.start();
        t2.start();
        t3.start();


    }
}
/**买票引发的安全问题
 * 1.相同的票出现了多次
 * 2.出现了超出范围的票
 *
 * 根本原因：线程执行时,有随机性
 *
 * 同步代码块：把操作共享数据的代码锁起来
 * 格式：
 * sychronized(锁){
 *     操作共享数据代码
 * }
 * 特点：
 * 1.锁默认打开,有一个线程进去了,锁自动关闭
 * 2.里面的代码全部执行完毕,线程出来,锁自动打开*/